NodeJS
...


Pasted image 20240215185033.png


Pasted image 20240215184918.png
...

Fluxo de Trabalho (workflow) até agora
...

VSCode
NodeJS
WebServer
Browser - Ambiente de Execução

Ambiente de Execução
...

  • Onde o nosso código JS está sendo executado?
    • Cliente (Navegador/Browser)
    • Servidor (NodeJS/Deno)
    • Mobile (ReactNative/Ionic)
    • Embarcado (Arduino/Raspberry/NodeMCU)
    • Aplicação Desktop (Electron/NW)

Características do NodeJS
...

  • Ambiente de Execução JavaScript no lado servidor;
  • Utilizar o motor (engine) V8 (Google), mesmo motor utilizado em navegadores Google Chrome, Firefox e outros.
  • Escrito em C++, permitindo que o nosso código JS interaja com o Sistema Operacional;
  • Utiliza uma== arquitetura Orientada a Eventos e uma modelo de I/O não bloqueante==;

    "✋ Oi sou um desenvolvedor Node."


Ambiente no Lado Servidor
...

  • Programação Modular - Código organizados em arquivos (módulos) diferentes;
  • Projetos Estruturados (Organização de arquivos em diretórios significativos);
  • Integração ao Sistema Operacional;
    • Acessar recursos locais
      • Manipulação de arquivos
      • Comunicação entre processos (IPC)
      • «...»

Programação Modular
...

  • Importação de módulos

    Podemos utilizar código disponibilizados por outras pessoas/orgs. em nossa aplicação.

  • Existem dois padrões principais para lidar com módulos
    • Padrão CommonJS - Utilizado no NodeJS por padrão;
    • Padrão EcmaScript (ESM) - Utilizado nos navegadores;

Padrão CommonJS
...

  • Quem disponibiliza algum código o faz via o objeto
JavaScript
1
module.exports = {«objetos»}
  • Quem requer código alheio o faz via a função
JavaScript
1
const nomeLocal = require(«nomeDoModulo»);

Padrão ESM
...

  • Quem disponibiliza algum código o faz via o objeto
JavaScript
1
export «nomeDoObjeto»;
  • Quem requer código alheio o faz via a função
JavaScript
1
import {«nomeDoObjeto»} from «caminhoDoArquivo»;

Ponto de Checagem
...

  • Criação de Objetos
    • Via construtor e criação de propriedades com notação de ponto ou notação de colchetes
    • Notação Literal
  • Construa uma instância com a seguinte estrutura:

Chave da Propriedade Tipo da Propriedade Valor da Propriedade
nome String Alan Turing
idade Number 41
aprovado Boolean true
quemEVoce function "Oi meu nome é Alan Turing, tenho 41 anos, aprovado? (Sim)"
JavaScript
1
const usuario1 = «...»;
2
// código ...
3
usuario.quemEVoce();

JavaScript
1
// Sol1 utilizando função construtora
2
const usuario1 = new Object();
3
usuario1.nome = "Alan Turing"
4
usuario1.idade = 41;
5
usuario1.aprovado = true;
6
usuario1.quemEVoce = function() {return «...»;}
7
console.log(usuario1.quemEVoce());
JavaScript
1
// Sol2 utilizando notação: Literal de objeto
2
const usuario1 = {
3
nome: "Alan Turing",
4
idade: 41,
5
aprovado: true,
6
quemEVoce() {
7
return «...»;
8
}
9
};
10
console.log(usuario1.quemEVoce());

Exemplo de importação-Exportação com CommonJS
...

JavaScript
1
// codigo_do_colega.js
2
function digaMeuNome() {
3
return "... é Heisenberg";
4
}
5

6
module.exports = {digaMeuNome};
JavaScript
1
// seu_codigo.js
2
const objetosImportados = require("./codigo_do_colega");
3
objetosImportados.digaMeuNome(); // => "... é Heisenberg"

Observações
...

  • Podemos exportar qualquer objetos.
JavaScript
1
const objeto = {
2
pi : 3.141592,
3
euler : 2.7182818,
4
resposta_para_tudo : 42,
5
senha : '12345',
6
usuario : {
7
nome: "gurguri",
8
matricula: "2024010101"
9
}
10
} // isso é um objeto.
11

12
module.exports = objeto;

JavaScript
1
console.log("importando informações...");
2

3
const info = require('./exportando_informacoes');
4
console.log(info);
5

6
console.log(`Nome do Usuário ${info.usuario.nome} com senha: ${info.senha}`);
7


Ponto de Checagem
...

  • Funções de Flecha ("Arrow" ou "Fat arrow")
JavaScript
1
// Função tradicional
2
function soma(a, b) {
3
return a + b;
4
}
5

6
// Arrow Function equivalente
7
const soma = (a, b) => {return a + b};
8
const soma = (a, b) => {a + b}; // sem return, a última expressão é retornada.
9
const soma = (a, b) => a + b; // se o corpo da função for uma única expressão.

Exemplo de escrita de arquivo em node
...

JavaScript
1
const fs = require('fs'); // Biblioteca FileSystem (FS)
2

3
// Conteúdo a ser escrito no arquivo
4
const content = 'Oi mundo!';
5

6
// Caminho do arquivo onde será escrito
7
const filePath = 'arquivo.txt';
8

9
// Escrevendo no arquivo
10
fs.writeFile(filePath, content, (err) => {
11
if (err) {
12
console.error('Ocorreu um erro ao escrever no arquivo:', err);
13
return;
14
}
15
console.log('Arquivo gravado com sucesso!');
16
});
17


Exemplo de leitura de arquivo em node
...

JavaScript
1
const fs = require('fs');
2

3
// Caminho do arquivo a ser lido
4
const filePath = 'arquivo.txt';
5

6
// Lendo o arquivo
7
fs.readFile(filePath, 'utf8', (err, data) => {
8
if (err) {
9
console.error('Ocorreu um erro ao ler o arquivo:', err);
10
return;
11
}
12
console.log('Conteúdo do arquivo:');
13
console.log(data);
14
});

Algumas convenções que aparecem nas bibliotecas padrões do Node
...

  • As funções são por padrão assíncronas
  • As versões síncronas de uma função são nomeadas com o padrão nome*Sync*(«args» ) .
    • Ex. writeFileSync(«args»)
  • As funções recebem uma função de retorno de erro ("callback de erro")

  • Projetos mais estruturados
    • Múltiplos Módulos (arquivos)
      • Arquivos de código JS
        • Seu próprio código
        • Código de terceiros (bibliotecas, frameworks)
      • Arquivos de marcação (*.html)
      • Arquivos de estilização (*.css)
      • Arquivos de testes (*.test.*)
      • Recursos (Assets) (imagens, fontes)
      • Arquivos de Configuração de Ambiente
      • Arquivos de Gerenciamento de Código

Vamos iniciar um projeto node
...

  • Gerenciadores de Pacotes (Dependências):
    • NPM (Node Package Manager) - padrão da instalação NodeJS
  • Escolha o diretório do projeto
powershell
1
mkdir MeuProjeto
2
cd MeuProjeto
  • Execute no seu shell:
powershell
1
npm init # ou npm init -y
  • ~$ npm init ou ~$ npm init -y
  • Observe o arquivo de configuração do projeto: package.json

json
1
{
2

3
"name": "meuprojeto",
4
"version": "1.0.0",
5
"description": "Projeto de aprendizado",
6
"main": "index.js",
7
"scripts": {
8
"test": "mocha ."
9
},
10
"author": "profgurguri",
11
"license": "ISC"
12
}

  • Instale alguma biblioteca de terceiros: ~$ npm install chalk
json
1
«...»
2
"dependencies": {
3
"chalk": "^5.3.0"
4
}
5
«...»
  • Criação da pasta de "node_modules"
node_modules
┗━ chalk
  ┗━ source
    ┗━ vendor
      ┣━ ansi_styles
      ┗━ supports-color

  • Para reproduzir toda a estrutura de instalação em outro local
    • mova os arquivos de projeto + package.json, não leve o node_modules
    • instale todas as dependências:
powershell
1
npm install .